1. Data description

df_cytokine = read_csv("../data/df_merge.csv")
df_cytokine %>% 
  dplyr::select(il6, cd163, ip10, crp, lbp, cd14) %>% 
  pastecs::stat.desc() %>% 
  kable() %>% 
  kable_styling()
il6 cd163 ip10 crp lbp cd14
nbr.val 377.000 3.77e+02 3.77e+02 3.74e+02 3.75e+02 3.77e+02
nbr.null 0.000 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00
nbr.na 0.000 0.00e+00 0.00e+00 3.00e+00 2.00e+00 0.00e+00
min 0.270 1.18e+02 1.23e+01 1.45e+01 2.00e+00 1.48e+02
max 8.291 1.86e+03 7.36e+02 1.58e+04 3.72e+04 5.50e+03
range 8.021 1.75e+03 7.23e+02 1.58e+04 3.72e+04 5.35e+03
sum 614.089 2.11e+05 4.41e+04 5.36e+05 3.72e+06 6.07e+05
median 1.279 5.21e+02 9.38e+01 5.77e+02 9.49e+03 1.55e+03
mean 1.629 5.60e+02 1.17e+02 1.43e+03 9.91e+03 1.61e+03
SE.mean 0.065 1.36e+01 4.54e+00 1.18e+02 2.26e+02 2.55e+01
CI.mean.0.95 0.127 2.68e+01 8.93e+00 2.32e+02 4.44e+02 5.01e+01
var 1.573 7.01e+04 7.78e+03 5.22e+06 1.91e+07 2.45e+05
std.dev 1.254 2.65e+02 8.82e+01 2.28e+03 4.38e+03 4.95e+02
coef.var 0.770 4.72e-01 7.53e-01 1.59e+00 4.41e-01 3.07e-01

2. Cytokine ~ groups

  1. P-value is obtained by ANCOVA test adjusting for age.

  2. P-values were not adjusted for multiple comparisons.

options(qwraps2_markup = "markdown")
summary_template1 =
  list("Visit" =
         list("Visit 1" = ~ n_perc0(visit == "Visit 1", na_rm = T),
              "Visit 2" = ~ n_perc0(visit == "Visit 2", na_rm = T)))

summary_template2 =
  list("Status" =
         list("Controls" = ~ n_perc0(status == "NC", na_rm = T),
              "Seroconverters" = ~ n_perc0(status == "SC", na_rm = T)))

2.1 NC: visit 1 vs. visit 2

df = df_cytokine %>% filter(status == "nc")
df$visit = recode(df$visit, `v1` = "Visit 1", `v2` = "Visit 2")

tab = df %>% summary_table(summary_template1)
print(tab, rtitle = "NC: visit 1 vs. visit 2")
NC: visit 1 vs. visit 2 . (N = 233)
Visit   
   Visit 1 156 (67)
   Visit 2 77 (33)
df_fig = df %>% group_by(visit) %>%
    summarise(il6 = mean(il6, na.rm = TRUE), 
              cd163 = mean(cd163, na.rm = TRUE),
              ip10 = mean(ip10, na.rm = TRUE), 
              crp = mean(crp, na.rm = TRUE),
              lbp = mean(lbp, na.rm = TRUE),
              cd14 = mean(cd14, na.rm = TRUE)) %>%
    gather(key = "cytokine", value = "value", il6:cd14)

df_long = df %>% gather(key = "cytokine", value = "value", il6:cd14)
df_p = df_long %>% group_by(cytokine) %>%
  do(fit = anova_test(data = ., formula = value ~ visit + age)) %>%
  summarise(p = fit$p[1])

df_jitter = df %>%
  dplyr::select(visit, il6:cd14) %>%
  gather(key = "cytokine", value = "value", -visit) %>%
  group_by(cytokine) %>%
  filter(value >= quantile(value, 0.1, na.rm = TRUE) & 
           value <= quantile(value, 0.9, na.rm = TRUE))

df_ann = df_jitter %>% group_by(cytokine) %>%
  summarise(x = 1.1, y = ifelse(mean(value, na.rm = TRUE) > 0, 
                                max(value, na.rm = TRUE),
                                0.2 * abs(mean(value, na.rm = TRUE))),
            y_max = ifelse(mean(value, na.rm = TRUE) > 0, 
                           1.3 * max(value, na.rm = TRUE),
                           0.5 * abs(mean(value, na.rm = TRUE))),
            visit = "Visit 1") %>%
  mutate(p = df_p$p,
         label = paste0("p = ", signif(p, 2)))

df_jitter$cytokine = recode(df_jitter$cytokine, 
                            il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                            crp = "CRP", lbp = "LBP", cd14 = "sCD14")
df_fig$cytokine = recode(df_fig$cytokine, 
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")
df_ann$cytokine = recode(df_ann$cytokine, 
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")
  

p = ggplot(data = df_fig, aes(x = visit, y = value)) + 
  geom_col(color = "black", aes(fill = visit)) + 
  geom_jitter(position = position_jitter(0.2), data = df_jitter, 
              alpha = 0.5, size = 0.8) +
  facet_wrap(.~cytokine, scales = "free") +
  labs(x = NULL, y = NULL) + 
  labs(title = "NC: visit 1 vs. visit 2") + 
  scale_fill_brewer(palette = "Accent", name = NULL) +
  geom_blank(data = df_ann, aes(y = y_max)) +
  geom_label(data = df_ann, aes(x = x, y = y, label = label), 
             size = 4, vjust = -0.5, hjust = 0, color = "black") +
  theme_bw() +
  theme(axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        strip.background = element_rect(fill = "white"),
        legend.position = "bottom",
        plot.title = element_text(hjust = 0.5))
p

2.2 SC: visit 1 vs. visit 2

df = df_cytokine %>% filter(status == "sc")
df$visit = recode(df$visit, `v1` = "Visit 1", `v2` = "Visit 2")

tab = df %>% summary_table(summary_template1)
print(tab, rtitle = "SC: visit 1 vs. visit 2")
SC: visit 1 vs. visit 2 . (N = 144)
Visit   
   Visit 1 87 (60)
   Visit 2 57 (40)
df_fig = df %>% group_by(visit) %>%
  summarise(il6 = mean(il6, na.rm = TRUE), 
            cd163 = mean(cd163, na.rm = TRUE),
            ip10 = mean(ip10, na.rm = TRUE), 
            crp = mean(crp, na.rm = TRUE),
            lbp = mean(lbp, na.rm = TRUE),
            cd14 = mean(cd14, na.rm = TRUE)) %>%
  gather(key = "cytokine", value = "value", il6:cd14)

df_long = df %>% gather(key = "cytokine", value = "value", il6:cd14)
df_p = df_long %>% group_by(cytokine) %>%
  do(fit = anova_test(data = ., formula = value ~ visit + age)) %>%
  summarise(p = fit$p[1])

df_jitter = df %>%
  dplyr::select(visit, il6:cd14) %>%
  gather(key = "cytokine", value = "value", -visit) %>%
  group_by(cytokine) %>%
  filter(value >= quantile(value, 0.1, na.rm = TRUE) & 
           value <= quantile(value, 0.9, na.rm = TRUE))

df_ann = df_jitter %>% group_by(cytokine) %>%
  summarise(x = 1.1, y = ifelse(mean(value, na.rm = TRUE) > 0, 
                                max(value, na.rm = TRUE),
                                0.2 * abs(mean(value, na.rm = TRUE))),
            y_max = ifelse(mean(value, na.rm = TRUE) > 0, 
                           1.3 * max(value, na.rm = TRUE),
                           0.5 * abs(mean(value, na.rm = TRUE))),
            visit = "Visit 1") %>%
  mutate(p = df_p$p,
         label = paste0("p = ", signif(p, 2)))

df_jitter$cytokine = recode(df_jitter$cytokine, 
                            il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                            crp = "CRP", lbp = "LBP", cd14 = "sCD14")
df_fig$cytokine = recode(df_fig$cytokine, 
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")
df_ann$cytokine = recode(df_ann$cytokine, 
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

p7.1 = ggplot(data = df_fig, aes(x = visit, y = value)) + 
  geom_col(color = "black", aes(fill = visit)) + 
  geom_jitter(position = position_jitter(0.2), data = df_jitter, 
              alpha = 0.5, size = 0.8) +
  facet_wrap(.~cytokine, scales = "free") +
  labs(x = NULL, y = NULL) + 
  labs(title = "SC: visit 1 vs. visit 2") + 
  scale_fill_brewer(palette = "Accent", name = NULL) +
  geom_blank(data = df_ann, aes(y = y_max)) +
  geom_label(data = df_ann, aes(x = x, y = y, label = label), 
             size = 4, vjust = -0.5, hjust = 0, color = "black") +
  theme_bw() +
  theme(axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        strip.background = element_rect(fill = "white"),
        legend.position = "bottom",
        plot.title = element_text(hjust = 0.5))
p7.1

2.3 Visit 1: NC vs. SC

df = df_cytokine %>% filter(visit == "v1")
df$status = recode(df$status, `nc` = "NC", `sc` = "SC")

tab = df %>% summary_table(summary_template2)
print(tab, rtitle = "Visit 1: NC vs. SC")
Visit 1: NC vs. SC . (N = 243)
Status   
   Controls 156 (64)
   Seroconverters 87 (36)
df_fig = df %>% group_by(status) %>%
  summarise(il6 = mean(il6, na.rm = TRUE), 
            cd163 = mean(cd163, na.rm = TRUE),
            ip10 = mean(ip10, na.rm = TRUE), 
            crp = mean(crp, na.rm = TRUE),
            lbp = mean(lbp, na.rm = TRUE),
            cd14 = mean(cd14, na.rm = TRUE)) %>%
  gather(key = "cytokine", value = "value", il6:cd14)

df_long = df %>% gather(key = "cytokine", value = "value", il6:cd14)
df_p = df_long %>% group_by(cytokine) %>%
  do(fit = anova_test(data = ., formula = value ~ status + age)) %>%
  summarise(p = fit$p[1])

df_jitter = df %>%
  dplyr::select(status, il6:cd14) %>%
  gather(key = "cytokine", value = "value", -status) %>%
  group_by(cytokine) %>%
  filter(value >= quantile(value, 0.1, na.rm = TRUE) & 
           value <= quantile(value, 0.9, na.rm = TRUE))

df_ann = df_jitter %>% group_by(cytokine) %>%
  summarise(x = 1.1, y = ifelse(mean(value, na.rm = TRUE) > 0, 
                                max(value, na.rm = TRUE),
                                0.2 * abs(mean(value, na.rm = TRUE))),
            y_max = ifelse(mean(value, na.rm = TRUE) > 0, 
                           1.3 * max(value, na.rm = TRUE),
                           0.5 * abs(mean(value, na.rm = TRUE))),
            status = "NC") %>%
  mutate(p = df_p$p,
         label = paste0("p = ", signif(p, 2)))

df_jitter$cytokine = recode(df_jitter$cytokine, 
                            il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                            crp = "CRP", lbp = "LBP", cd14 = "sCD14")
df_fig$cytokine = recode(df_fig$cytokine, 
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")
df_ann$cytokine = recode(df_ann$cytokine, 
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

p7.2 = ggplot(data = df_fig, aes(x = status, y = value)) + 
  geom_col(color = "black", aes(fill = status)) + 
  geom_jitter(position = position_jitter(0.2), data = df_jitter, 
              alpha = 0.5, size = 0.8) +
  facet_wrap(.~cytokine, scales = "free") +
  labs(x = NULL, y = NULL) + 
  labs(title = "Visit 1: NC vs. SC") + 
  scale_fill_discrete(name = NULL) +
  geom_blank(data = df_ann, aes(y = y_max)) +
  geom_label(data = df_ann, aes(x = x, y = y, label = label), 
             size = 4, vjust = -0.5, hjust = 0, color = "black") +
  theme_bw() +
  theme(axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        strip.background = element_rect(fill = "white"),
        legend.position = "bottom",
        plot.title = element_text(hjust = 0.5))
p7.2

p7 = ggarrange(p7.2, p7.1, ncol = 2, nrow = 1, labels = c("A", "B"))
ggsave(plot = p7, "../images/main/fig7.pdf", height = 5.5, width = 12)   
ggsave(plot = p7, "../images/main/fig7.jpeg", height = 5.5, width = 12, dpi = 300)

2.4 Visit 2: NC vs. SC

df = df_cytokine %>% filter(visit == "v2")
df$status = recode(df$status, `nc` = "NC", `sc` = "SC")

tab = df %>% summary_table(summary_template2)
print(tab, rtitle = "Visit 2: NC vs. SC")
Visit 2: NC vs. SC . (N = 134)
Status   
   Controls 77 (57)
   Seroconverters 57 (43)
df_fig = df %>% group_by(status) %>%
  summarise(il6 = mean(il6, na.rm = TRUE), 
            cd163 = mean(cd163, na.rm = TRUE),
            ip10 = mean(ip10, na.rm = TRUE), 
            crp = mean(crp, na.rm = TRUE),
            lbp = mean(lbp, na.rm = TRUE),
            cd14 = mean(cd14, na.rm = TRUE)) %>%
  gather(key = "cytokine", value = "value", il6:cd14)

df_long = df %>% gather(key = "cytokine", value = "value", il6:cd14)
df_p = df_long %>% group_by(cytokine) %>%
  do(fit = anova_test(data = ., formula = value ~ status + age)) %>%
  summarise(p = fit$p[1])

df_jitter = df %>%
  dplyr::select(status, il6:cd14) %>%
  gather(key = "cytokine", value = "value", -status) %>%
  group_by(cytokine) %>%
  filter(value >= quantile(value, 0.1, na.rm = TRUE) & 
           value <= quantile(value, 0.9, na.rm = TRUE))

df_ann = df_jitter %>% group_by(cytokine) %>%
  summarise(x = 1.1, y = ifelse(mean(value, na.rm = TRUE) > 0, 
                                max(value, na.rm = TRUE),
                                0.2 * abs(mean(value, na.rm = TRUE))),
            y_max = ifelse(mean(value, na.rm = TRUE) > 0, 
                           1.3 * max(value, na.rm = TRUE),
                           0.5 * abs(mean(value, na.rm = TRUE))),
            status = "NC") %>%
  mutate(p = df_p$p,
         label = paste0("p = ", signif(p, 2)))

df_jitter$cytokine = recode(df_jitter$cytokine, 
                            il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                            crp = "CRP", lbp = "LBP", cd14 = "sCD14")
df_fig$cytokine = recode(df_fig$cytokine, 
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")
df_ann$cytokine = recode(df_ann$cytokine, 
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

p = ggplot(data = df_fig, aes(x = status, y = value)) + 
  geom_col(color = "black", aes(fill = status)) + 
  geom_jitter(position = position_jitter(0.2), data = df_jitter, 
              alpha = 0.5, size = 0.8) +
  facet_wrap(.~cytokine, scales = "free") +
  labs(x = NULL, y = NULL) + 
  labs(title = "Visit 2: NC vs. SC") + 
  scale_fill_discrete(name = NULL) +
  geom_blank(data = df_ann, aes(y = y_max)) +
  geom_label(data = df_ann, aes(x = x, y = y, label = label), 
             size = 4, vjust = -0.5, hjust = 0, color = "black") +
  theme_bw() +
  theme(axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        strip.background = element_rect(fill = "white"),
        legend.position = "bottom",
        plot.title = element_text(hjust = 0.5))
p

3. Log2(%CD4/%CD8) ~ cytokine

  1. P-values were obtained from linear models adjusting for age.

  2. P-values were not adjusted for multiple comparisons.

df_merge = df_cytokine %>% 
  dplyr::select(subjid, visit, status, il6:cd14, age, vload, leu3p, leu2p) %>%
  mutate(vload = log10(vload), cd4 = leu3p, cd8 = leu2p, ratio = log(cd4/cd8, base = 2))

lm_eqn = function(m){
  
  a = unname(coef(m))[1]
  b = unname(coef(m))[2]
  c = unname(coef(m))[3]
  p_val = summary(m)$coef[2, "Pr(>|t|)"]
  
  b = ifelse(sign(b) >= 0, 
             paste0(" + ", format(b, digits = 2)), 
             paste0(" - ", format(-b, digits = 2)))
  c = ifelse(sign(c) >= 0, 
             paste0(" + ", format(c, digits = 2)), 
             paste0(" - ", format(-c, digits = 2)))
  
  eq = substitute(paste(italic(y) == a, b, italic(x), c, italic(age), ", ", italic(p) == p_val),
                  list(a = format(a, digits = 2), b = b, c = c,
                       p_val = format(p_val, digits = 2)))
  
  return(as.character(as.expression(eq)))              
}

3.1 NC: visit 1 vs. visit 2

df = df_merge %>% filter(status == "nc")
df$visit = recode(df$visit, `v1` = "Visit 1", `v2` = "Visit 2")

# Visit 1
df1 = df %>% filter(visit == "Visit 1")
df_fig = df1 %>% gather(key = "cytokine", value = "value", il6:cd14)
df_fig$cytokine = recode(df_fig$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

df_lm = df_fig %>% group_by(cytokine) %>%
  do(fit = lm(formula = ratio ~ value + age, data = .)) %>%
  summarise(eq = lm_eqn(m = fit))

df_ann = df_fig %>% group_by(cytokine) %>%
  summarise(x = ifelse(mean(value, na.rm = TRUE) > 0, 
                       0.5 * max(value, na.rm = TRUE),
                       0.2 * abs(mean(value, na.rm = TRUE))),
            y = 2, 
            y_max = 2.2,
            value = 0) %>%
   mutate(eq = df_lm$eq)
df_ann$cytokine = recode(df_ann$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

ps7.1 = ggplot(data = df_fig, aes(x = value, y = ratio)) + 
  geom_point(alpha = 0.8, color = "#7FC97F") +
  geom_smooth(method = "lm", se = TRUE, color = "skyblue", 
              formula = y ~ x) +
  facet_wrap(.~cytokine, scales = "free") +
  labs(x = "Cytokine", 
       y = expression(paste(log[2], "(", CD4^{"+"}, "/", CD8^{"+"}, ")")), 
       title = "NC: Visit 1") + 
  geom_blank(data = df_ann, aes(y = y_max)) +
  geom_text(data = df_ann, aes(x = x, y = y, label = eq), size = 3, 
            parse = TRUE, inherit.aes = FALSE) + 
  theme_bw() +
  theme(strip.background = element_rect(fill = "white"),
        legend.position = "bottom",
        plot.title = element_text(hjust = 0.5))

# Visit 2
df2 = df %>% filter(visit == "Visit 2")
df_fig = df2 %>% gather(key = "cytokine", value = "value", il6:cd14)
df_fig$cytokine = recode(df_fig$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

df_lm = df_fig %>% group_by(cytokine) %>%
  do(fit = lm(formula = ratio ~ value + age, data = .)) %>%
  summarise(eq = lm_eqn(m = fit))

df_ann = df_fig %>% group_by(cytokine) %>%
  summarise(x = ifelse(mean(value, na.rm = TRUE) > 0, 
                       0.5 * max(value, na.rm = TRUE),
                       0.2 * abs(mean(value, na.rm = TRUE))),
            y = 2, 
            y_max = 2.2,
            value = 0) %>%
    mutate(eq = df_lm$eq)
df_ann$cytokine = recode(df_ann$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

ps7.2 = ggplot(data = df_fig, aes(x = value, y = ratio)) + 
  geom_point(alpha = 0.8, color = "#BEAED4") +
  geom_smooth(method = "lm", se = TRUE, color = "skyblue", 
              formula = y ~ x) +
  facet_wrap(.~cytokine, scales = "free") +
  labs(x = "Cytokine", 
       y = expression(paste(log[2], "(", CD4^{"+"}, "/", CD8^{"+"}, ")")), 
       title = "NC: Visit 2") + 
  geom_blank(data = df_ann, aes(y = y_max)) +
  geom_text(data = df_ann, aes(x = x, y = y, label = eq), size = 3, 
            parse = TRUE, inherit.aes = FALSE) + 
  theme_bw() +
  theme(strip.background = element_rect(fill = "white"),
        legend.position = "bottom",
        plot.title = element_text(hjust = 0.5))

ps7 = ggarrange(ps7.1, ps7.2, ncol = 1, nrow = 2, labels = c("A", "B"),
                legend = "bottom", common.legend = TRUE)
ps7

ggsave("../images/supplementary/fig_s7.pdf", height = 10, width = 9) 
ggsave("../images/supplementary/fig_s7.jpeg", height = 10, width = 9, dpi = 300)

3.2 SC: visit 1 vs. visit 2

df = df_merge %>% filter(status == "sc")
df$visit = recode(df$visit, `v1` = "Visit 1", `v2` = "Visit 2")

# Visit 1
df1 = df %>% filter(visit == "Visit 1")
df_fig = df1 %>% gather(key = "cytokine", value = "value", il6:cd14)
df_fig$cytokine = recode(df_fig$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

df_lm = df_fig %>% group_by(cytokine) %>%
  do(fit = lm(formula = ratio ~ value + age, data = .)) %>%
  summarise(eq = lm_eqn(m = fit))

df_ann = df_fig %>% group_by(cytokine) %>%
  summarise(x = ifelse(mean(value, na.rm = TRUE) > 0, 
                       0.5 * max(value, na.rm = TRUE),
                       0.2 * abs(mean(value, na.rm = TRUE))),
            y = 2, 
            y_max = 2.2,
            value = 0) %>%
    mutate(eq = df_lm$eq)
df_ann$cytokine = recode(df_ann$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

p8.1 = ggplot(data = df_fig, aes(x = value, y = ratio)) + 
  geom_point(alpha = 0.8, color = "#7FC97F") +
  geom_smooth(method = "lm", se = TRUE, color = "skyblue", 
              formula = y ~ x) +
  facet_wrap(.~cytokine, scales = "free") +
  labs(x = "Cytokine", 
       y = expression(paste(log[2], "(", CD4^{"+"}, "/", CD8^{"+"}, ")")), 
       title = "SC: Visit 1") + 
  geom_blank(data = df_ann, aes(y = y_max)) +
  geom_text(data = df_ann, aes(x = x, y = y, label = eq), size = 3, 
            parse = TRUE, inherit.aes = FALSE) + 
  theme_bw() +
  theme(strip.background = element_rect(fill = "white"),
        legend.position = "bottom",
        plot.title = element_text(hjust = 0.5))

# Visit 2
df2 = df %>% filter(visit == "Visit 2")
df_fig = df2 %>% gather(key = "cytokine", value = "value", il6:cd14)
df_fig$cytokine = recode(df_fig$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

df_lm = df_fig %>% group_by(cytokine) %>%
  do(fit = lm(formula = ratio ~ value + age, data = .)) %>%
  summarise(eq = lm_eqn(m = fit))

df_ann = df_fig %>% group_by(cytokine) %>%
  summarise(x = ifelse(mean(value, na.rm = TRUE) > 0, 
                       0.5 * max(value, na.rm = TRUE),
                       0.2 * abs(mean(value, na.rm = TRUE))),
            y = 2, 
            y_max = 2.2,
            value = 0) %>%
    mutate(eq = df_lm$eq)
df_ann$cytokine = recode(df_ann$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

p8.2 = ggplot(data = df_fig, aes(x = value, y = ratio)) + 
  geom_point(alpha = 0.8, color = "#BEAED4") +
  geom_smooth(method = "lm", se = TRUE, color = "skyblue", 
              formula = y ~ x) +
  facet_wrap(.~cytokine, scales = "free") +
  labs(x = "Cytokine", 
       y = expression(paste(log[2], "(", CD4^{"+"}, "/", CD8^{"+"}, ")")), 
       title = "SC: Visit 2") + 
  geom_blank(data = df_ann, aes(y = y_max)) +
  geom_text(data = df_ann, aes(x = x, y = y, label = eq), size = 3, 
            parse = TRUE, inherit.aes = FALSE) + 
  theme_bw() +
  theme(strip.background = element_rect(fill = "white"),
        legend.position = "bottom",
        plot.title = element_text(hjust = 0.5))

p8 = ggarrange(p8.1, p8.2, ncol = 1, nrow = 2, labels = c("A", "B"),
               legend = "bottom", common.legend = TRUE)
p8

ggsave("../images/main/fig8.pdf", height = 10, width = 9) 
ggsave("../images/main/fig8.jpeg", height = 10, width = 9, dpi = 300)

3.3 Visit 1: NC vs. SC

df = df_merge %>% filter(visit == "v1")
df$status = recode(df$status, `nc` = "NC", `sc` = "SC")

# Controls
df1 = df %>% filter(status == "NC")
df_fig = df1 %>% gather(key = "cytokine", value = "value", il6:cd14)
df_fig$cytokine = recode(df_fig$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

df_lm = df_fig %>% group_by(cytokine) %>%
  do(fit = lm(formula = ratio ~ value + age, data = .)) %>%
  summarise(eq = lm_eqn(m = fit))

df_ann = df_fig %>% group_by(cytokine) %>%
  summarise(x = ifelse(mean(value, na.rm = TRUE) > 0, 
                       0.5 * max(value, na.rm = TRUE),
                       0.2 * abs(mean(value, na.rm = TRUE))),
            y = 2, 
            y_max = 2.2,
            value = 0) %>%
    mutate(eq = df_lm$eq)
df_ann$cytokine = recode(df_ann$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

p1 = ggplot(data = df_fig, aes(x = value, y = ratio)) + 
  geom_point(alpha = 0.8, color = "#F8766D") +
  geom_smooth(method = "lm", se = TRUE, color = "skyblue", 
              formula = y ~ x) +
  facet_wrap(.~cytokine, scales = "free") +
  labs(x = "Cytokine", 
       y = expression(paste(log[2], "(", CD4^{"+"}, "/", CD8^{"+"}, ")")), 
       title = "NC") + 
  geom_blank(data = df_ann, aes(y = y_max)) +
  geom_text(data = df_ann, aes(x = x, y = y, label = eq), size = 3, 
            parse = TRUE, inherit.aes = FALSE) + 
  theme_bw() +
  theme(strip.background = element_rect(fill = "white"),
        legend.position = "bottom",
        plot.title = element_text(hjust = 0.5))

# Seroconverters
df2 = df %>% filter(status == "SC")
df_fig = df2 %>% gather(key = "cytokine", value = "value", il6:cd14)
df_fig$cytokine = recode(df_fig$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

df_lm = df_fig %>% group_by(cytokine) %>%
  do(fit = lm(formula = ratio ~ value + age, data = .)) %>%
  summarise(eq = lm_eqn(m = fit))

df_ann = df_fig %>% group_by(cytokine) %>%
  summarise(x = ifelse(mean(value, na.rm = TRUE) > 0, 
                       0.5 * max(value, na.rm = TRUE),
                       0.2 * abs(mean(value, na.rm = TRUE))),
            y = 2, 
            y_max = 2.2,
            value = 0) %>%
    mutate(eq = df_lm$eq)
df_ann$cytokine = recode(df_ann$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

p2 = ggplot(data = df_fig, aes(x = value, y = ratio)) + 
  geom_point(alpha = 0.8, color = "#00BFC4") +
  geom_smooth(method = "lm", se = TRUE, color = "skyblue", 
              formula = y ~ x) +
  facet_wrap(.~cytokine, scales = "free") +
  labs(x = "Cytokine", 
       y = expression(paste(log[2], "(", CD4^{"+"}, "/", CD8^{"+"}, ")")), 
       title = "SC") + 
  geom_blank(data = df_ann, aes(y = y_max)) +
  geom_text(data = df_ann, aes(x = x, y = y, label = eq), size = 3, 
            parse = TRUE, inherit.aes = FALSE) + 
  theme_bw() +
  theme(strip.background = element_rect(fill = "white"),
        legend.position = "bottom",
        plot.title = element_text(hjust = 0.5))

p = ggarrange(p1, p2, ncol = 1, nrow = 2, legend = "bottom", common.legend = TRUE)
p

3.4 Visit 2: NC vs. SC

df = df_merge %>% filter(visit == "v2")
df$status = recode(df$status, `nc` = "NC", `sc` = "SC")

# Controls
df1 = df %>% filter(status == "NC")
df_fig = df1 %>% gather(key = "cytokine", value = "value", il6:cd14)
df_fig$cytokine = recode(df_fig$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

df_lm = df_fig %>% group_by(cytokine) %>%
  do(fit = lm(formula = ratio ~ value + age, data = .)) %>%
  summarise(eq = lm_eqn(m = fit))

df_ann = df_fig %>% group_by(cytokine) %>%
  summarise(x = ifelse(mean(value, na.rm = TRUE) > 0, 
                       0.5 * max(value, na.rm = TRUE),
                       0.2 * abs(mean(value, na.rm = TRUE))),
            y = 2, 
            y_max = 2.2,
            value = 0) %>%
    mutate(eq = df_lm$eq)
df_ann$cytokine = recode(df_ann$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

p1 = ggplot(data = df_fig, aes(x = value, y = ratio)) + 
  geom_point(alpha = 0.8, color = "#F8766D") +
  geom_smooth(method = "lm", se = TRUE, color = "skyblue", 
              formula = y ~ x) +
  facet_wrap(.~cytokine, scales = "free") +
  labs(x = "Cytokine", 
       y = expression(paste(log[2], "(", CD4^{"+"}, "/", CD8^{"+"}, ")")), 
       title = "NC") + 
  geom_blank(data = df_ann, aes(y = y_max)) +
  geom_text(data = df_ann, aes(x = x, y = y, label = eq), size = 3, 
            parse = TRUE, inherit.aes = FALSE) + 
  theme_bw() +
  theme(strip.background = element_rect(fill = "white"),
        legend.position = "bottom",
        plot.title = element_text(hjust = 0.5))

# Seroconverters
df2 = df %>% filter(status == "SC")
df_fig = df2 %>% gather(key = "cytokine", value = "value", il6:cd14)
df_fig$cytokine = recode(df_fig$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

df_lm = df_fig %>% group_by(cytokine) %>%
  do(fit = lm(formula = ratio ~ value + age, data = .)) %>%
  summarise(eq = lm_eqn(m = fit))

df_ann = df_fig %>% group_by(cytokine) %>%
  summarise(x = ifelse(mean(value, na.rm = TRUE) > 0, 
                       0.5 * max(value, na.rm = TRUE),
                       0.2 * abs(mean(value, na.rm = TRUE))),
            y = 2, 
            y_max = 2.2,
            value = 0) %>%
    mutate(eq = df_lm$eq)
df_ann$cytokine = recode(df_ann$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

p2 = ggplot(data = df_fig, aes(x = value, y = ratio)) + 
  geom_point(alpha = 0.8, color = "#00BFC4") +
  geom_smooth(method = "lm", se = TRUE, color = "skyblue", 
              formula = y ~ x) +
  facet_wrap(.~cytokine, scales = "free") +
  labs(x = "Cytokine", 
       y = expression(paste(log[2], "(", CD4^{"+"}, "/", CD8^{"+"}, ")")), 
       title = "SC") + 
  geom_blank(data = df_ann, aes(y = y_max)) +
  geom_text(data = df_ann, aes(x = x, y = y, label = eq), size = 3, 
            parse = TRUE, inherit.aes = FALSE) + 
  theme_bw() +
  theme(strip.background = element_rect(fill = "white"),
        legend.position = "bottom",
        plot.title = element_text(hjust = 0.5))

p = ggarrange(p1, p2, ncol = 1, nrow = 2, legend = "bottom", common.legend = TRUE)
p

4. Log10(viral load) ~ cytokine

  1. For seroconverters at visit 2.

  2. P-values were obtained from linear models adjusting for age.

  3. P-values were not adjusted for multiple comparisons.

df = df_merge %>% filter(status == "sc", visit == "v2")
df_fig = df %>% gather(key = "cytokine", value = "value", il6:cd14)
df_fig$cytokine = recode(df_fig$cytokine,
                         il6 = "IL-6", cd163 = "sCD163", ip10 = "IP-10",
                         crp = "CRP", lbp = "LBP", cd14 = "sCD14")

df_lm = df_fig %>% group_by(cytokine) %>%
  do(fit = lm(formula = vload ~ value + age, data = .)) %>%
  summarise(eq = lm_eqn(m = fit))

df_ann = df_fig %>% group_by(cytokine) %>%
  summarise(x = ifelse(mean(value, na.rm = TRUE) > 0, 
                       0.5 * max(value, na.rm = TRUE),
                       0.2 * abs(mean(value, na.rm = TRUE))),
            y = 2, 
            y_max = 2.2,
            value = 0) %>%
    mutate(eq = df_lm$eq)

p9 = ggplot(data = df_fig, aes(x = value, y = vload)) + 
  geom_point(alpha = 0.8, color = "#BEAED4") +
  geom_smooth(method = "lm", se = TRUE, color = "skyblue", 
              formula = y ~ x) +
  facet_wrap(.~cytokine, scales = "free") +
  labs(x = "Cytokine", 
       y = expression(paste(log[10], "(Viral Load)")), 
       title = "SC: Visit 2") + 
  geom_blank(data = df_ann, aes(y = y_max)) +
  geom_text(data = df_ann, aes(x = x, y = y, label = eq), parse = TRUE, 
            inherit.aes = FALSE, size = 3) + 
  theme_bw() +
  theme(strip.background = element_rect(fill = "white"),
        legend.position = "bottom",
        plot.title = element_text(hjust = 0.5))
p9

ggsave("../images/main/fig9.pdf", height = 5, width = 9) 
ggsave("../images/main/fig9.jpeg", height = 5, width = 9, dpi = 300) 

Session information

sessionInfo()
R version 4.1.1 (2021-08-10)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Big Sur 10.16

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] kableExtra_1.3.4 rstatix_0.7.0    ggpubr_0.4.0     qwraps2_0.5.2   
 [5] magrittr_2.0.1   forcats_0.5.1    stringr_1.4.0    dplyr_1.0.7     
 [9] purrr_0.3.4      tidyr_1.1.3      tibble_3.1.5     ggplot2_3.3.5   
[13] tidyverse_1.3.1  readr_2.0.1     

loaded via a namespace (and not attached):
 [1] nlme_3.1-153       fs_1.5.0           lubridate_1.7.10   bit64_4.0.5       
 [5] webshot_0.5.2      RColorBrewer_1.1-2 httr_1.4.2         tools_4.1.1       
 [9] backports_1.2.1    utf8_1.2.2         R6_2.5.1           mgcv_1.8-36       
[13] DBI_1.1.1          colorspace_2.0-2   withr_2.4.2        tidyselect_1.1.1  
[17] bit_4.0.4          curl_4.3.2         compiler_4.1.1     cli_3.0.1         
[21] rvest_1.0.1        pastecs_1.3.21     xml2_1.3.2         labeling_0.4.2    
[25] scales_1.1.1       systemfonts_1.0.2  digest_0.6.28      foreign_0.8-81    
[29] rmarkdown_2.11     svglite_2.0.0      rio_0.5.27         pkgconfig_2.0.3   
[33] htmltools_0.5.2    dbplyr_2.1.1       fastmap_1.1.0      highr_0.9         
[37] rlang_0.4.11       readxl_1.3.1       rstudioapi_0.13    farver_2.1.0      
[41] jquerylib_0.1.4    generics_0.1.0     jsonlite_1.7.2     vroom_1.5.5       
[45] zip_2.2.0          car_3.0-11         Matrix_1.3-4       Rcpp_1.0.7        
[49] munsell_0.5.0      fansi_0.5.0        abind_1.4-5        lifecycle_1.0.1   
[53] stringi_1.7.4      yaml_2.2.1         carData_3.0-4      grid_4.1.1        
[57] parallel_4.1.1     crayon_1.4.1       lattice_0.20-44    splines_4.1.1     
[61] cowplot_1.1.1      haven_2.4.3        hms_1.1.0          knitr_1.34        
[65] pillar_1.6.3       boot_1.3-28        ggsignif_0.6.3     reprex_2.0.1      
[69] glue_1.4.2         evaluate_0.14      data.table_1.14.0  modelr_0.1.8      
[73] vctrs_0.3.8        tzdb_0.1.2         cellranger_1.1.0   gtable_0.3.0      
[77] assertthat_0.2.1   xfun_0.26          openxlsx_4.2.4     broom_0.7.9       
[81] viridisLite_0.4.0  ellipsis_0.3.2